#ifndef ROBOTOBSERVABLE_H_
#define ROBOTOBSERVABLE_H_

#include <list>
class RobotObservable;

#include "RobotObserveur.h"

class RobotObservable
{
	private:
		std::list<RobotObserveur*> listRobotObserveur;
	
	public:
	
		void ajouterObserveur(RobotObserveur *robotObserveur)
		{
			listRobotObserveur.push_front(robotObserveur);
		}
	
		void notifierChangementPosition(Position &pos)
		{
			std::list<RobotObserveur*>::const_iterator iter;
			for (iter=listRobotObserveur.begin(); iter != listRobotObserveur.end(); iter++)
  			{
   				(*iter)->afficheChangementPosition(pos);
  			}
		}
		
		
		void notifierChangementEtat(std::string etat)
		{
			std::list<RobotObserveur*>::const_iterator iter;
			for (iter=listRobotObserveur.begin(); iter != listRobotObserveur.end(); iter++)
  			{
   				(*iter)->afficheChangementEtat(etat);
  			}
		}
		
		
		void notifierChangementDirection(Direction &direction)
		{
			std::list<RobotObserveur*>::const_iterator iter;
			for (iter=listRobotObserveur.begin(); iter != listRobotObserveur.end(); iter++)
  			{
   				(*iter)->afficheChangementDirection(direction);
  			}
		}
		
		
		void notifierSaisirObjet()
		{
			std::list<RobotObserveur*>::const_iterator iter;
			for (iter=listRobotObserveur.begin(); iter != listRobotObserveur.end(); iter++)
  			{
   				(*iter)->afficheSaisirObjet();
  			}
		}
		
		
		void notifierDepotObjet()
		{
			std::list<RobotObserveur*>::const_iterator iter;
			for (iter=listRobotObserveur.begin(); iter != listRobotObserveur.end(); iter++)
  			{
   				(*iter)->afficheDepotObjet();
  			}
		}
		
		
		void notifierPeserObjet()
		{
			std::list<RobotObserveur*>::const_iterator iter;
			for (iter=listRobotObserveur.begin(); iter != listRobotObserveur.end(); iter++)
  			{
   				(*iter)->affichePeserObjet();
  			}
		}
		
		void notifierEvaluerObstacle()
		{
			std::list<RobotObserveur*>::const_iterator iter;
			for (iter=listRobotObserveur.begin(); iter != listRobotObserveur.end(); iter++)
  			{
   				(*iter)->afficheEvaluerObstacle();
  			}
		}
		
		void notifierArreter()
		{
			std::list<RobotObserveur*>::const_iterator iter;
			for (iter=listRobotObserveur.begin(); iter != listRobotObserveur.end(); iter++)
  			{
   				(*iter)->afficheArreter();
  			}
		}

		void notifierRepartir()
		{
			std::list<RobotObserveur*>::const_iterator iter;
			for (iter=listRobotObserveur.begin(); iter != listRobotObserveur.end(); iter++)
  			{
   				(*iter)->afficheRepartir();
  			}
		}
};

#endif /*ROBOTOBSERVABLE_H_*/
